package com.example.springboot3demo.service;

import com.example.springboot3demo.annotation.MethodSync;
import com.example.springboot3demo.mq.dto.TestDto;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

/**
 * 方法同步测试服务
 * 用于演示基于RabbitMQ的实例间方法同步功能
 *
 * @author Your Name
 * @date 2024-01-01
 */
@Slf4j
@Service
public class MethodSyncTestService {
    
    /**
     * 测试方法同步
     * 该方法会被切面拦截，并将调用信息发送到RabbitMQ
     * 
     * @param message 消息内容
     */
    @MethodSync
    public void syncMethod(String message) {
        log.info("执行同步方法: {}", message);
        // 模拟业务逻辑处理
        System.out.println("处理业务逻辑: " + message);
    }
    
    /**
     * 带参数的测试方法同步
     * 该方法会被切面拦截，并将调用信息发送到RabbitMQ
     * 
     * @param id ID
     * @param name 名称
     * @param count 数量
     */
    @MethodSync
    public void syncMethodWithParams(Long id, String name, Integer count) {
        log.info("执行带参数的同步方法: id={}, name={}, count={}", id, name, count);
        // 模拟业务逻辑处理
        System.out.println("处理业务逻辑: id=" + id + ", name=" + name + ", count=" + count);
    }
    
    /**
     * 测试对象类型参数的方法同步
     * 该方法会被切面拦截，并将调用信息发送到RabbitMQ
     * 
     * @param testDto 测试DTO对象
     */
    @MethodSync
    public void syncMethodWithObject(TestDto testDto) {
        log.info("执行带对象参数的同步方法: name={}, age={}, active={}", testDto.getName(), testDto.getAge(), testDto.isActive());
        // 模拟业务逻辑处理
        System.out.println("处理业务逻辑: name=" + testDto.getName() + ", age=" + testDto.getAge() + ", active=" + testDto.isActive());
    }
}